/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package by.bsu.scs_bsu.controller;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import by.bsu.scs_bsu.commands.Command;
import by.bsu.scs_bsu.resources.managers.PageLinksManager;
import by.bsu.scs_bsu.resources.managers.MessageManager;

public class Controller extends HttpServlet implements javax.servlet.Servlet {
//объект, содержащий список возможных команд
	
	private static final long serialVersionUID = 1L;
	RequestHelper requestHelper = RequestHelper.getInstance();

    public Controller() {
        super();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	String page = null;
        try {
            //определение команды, пришедшей из JSP
            Command command = requestHelper.getCommand(request);
            /*вызов реализованного метода execute() интерфейса Command и передача
            параметров классу-обработчику конкретной команды*/
            page = command.execute(request, response);
            // метод возвращает страницу ответа
        } catch (ServletException e) {
            //генерация сообщения об ошибке
            request.setAttribute("errorMessage", MessageManager.getProperty(MessageManager.SERVLET_EXCEPTION_ERROR_MESSAGE));
            //вызов JSP-страницы c cообщением об ошибке
            page = PageLinksManager.getProperty(PageLinksManager.ERROR_PAGE_PATH);
        } catch (IOException e) {
            request.setAttribute("errorMessage", MessageManager.getProperty(MessageManager.IO_EXCEPTION_ERROR_MESSAGE));
            page = PageLinksManager.getProperty(PageLinksManager.ERROR_PAGE_PATH);
        }
        //вызов страницы ответа на запрос
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(page);
        
        dispatcher.forward(request, response);
        
    }
}
